#ifndef MESH_H
#define MESH_H

#include <algorithm/shared/data/topology/geometry/Geometry.h>
#include <algorithm/shared/utils/Vec3.h>
#include <utils/ParaUtils.h>

#include <vector>

#include <boost/describe.hpp>

/**
 * 只需要输入文件路径，其它参数在文件中设置即可
 */

namespace solar
{
    /*
     * 自定义
     * 读入mesh(.obj)文件，这个文件记录了定日镜上各个点的位置、法向信息
     */
    class Mesh : public Geometry
    {
        public:
            Mesh() = default;
            [[nodiscard]] auto getType() const -> GeometryType override { return type_; }
            void readFile(); // 读取文件
#include <utils/class_name.inc>

        private:
            std::string file_;

            GeometryType type_ = GeometryType::kGeometryMesh;

            std::vector<std::vector<Vec3>> points_;
            std::vector<std::vector<Vec3>> normals_;
            BOOST_DESCRIBE_CLASS(Mesh, (Geometry), (), (), (file_, points_, normals_))
    };
} // namespace solar
#define CURRENT_CLASS_NAME Mesh
#include <utils/class_describe_header.inc>
SOLAR_DESCRIBE_CLASS(Mesh, (Geometry), (), (), (file_, points_, normals_))
#endif
